/**
 * Usuario.java
 *
 * Projeto: SGA-LEDS
 *
 * Rodrigo Soares Maia IFES - Instituto Federal do Espírito Santo - Campus Serra
 */
package controleInterno.cdp;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.OneToOne;
import utilitario.utilitarioPersistencia.cdp.ObjetoPersistente;
import utilitario.utilitarioPessoa.cdp.Pessoa;

@Entity
public class Usuario extends ObjetoPersistente
{
    private String nome;
    private String senha;
    private boolean privilegioAdm;
    private boolean privilegioGerLab;
    private Pessoa pessoa;

    public String getNome()
    {
        return nome;
    }

    public void setNome(String nome)
    {
        this.nome = nome;
    }

    public String getSenha()
    {
        return senha;
    }

    public void setSenha(String senha)
    {
        this.senha = senha;
    }

    public boolean getPrivilegioAdm()
    {
        return this.privilegioAdm;
    }
    
    public void setPrivilegioAdm(boolean valor)
    {
        this.privilegioAdm = valor;
    }
    
    public boolean getPrivilegioGerLab()
    {
        return this.privilegioGerLab;
    }
    
    public void setPrivilegioGerLab(boolean valor)
    {
        this.privilegioGerLab = valor;
    }

    @OneToOne(cascade = CascadeType.REMOVE)
    public Pessoa getPessoa()
    {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa)
    {
        this.pessoa = pessoa;
    }

    /**
     * Gera um hash code a partir de uma string.
     * @param s
     * @return String do hash code  gerado
     */
    public static String gerarHashCode(String s)
    {
        //define o tipo de hash a ser gerado
        MessageDigest hash = null;
        try
        {
            hash = MessageDigest.getInstance("MD5");
        }
        catch (NoSuchAlgorithmException ex)
        {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        //passa os bytes da senha
        hash.update(s.getBytes());

        //transforma o hash em bytes gerado para hexadecimal
        String hashCode = byte2StringHexa(hash.digest());
        hash.reset();

        return hashCode;
    }

    private static String byte2StringHexa(byte[] bytes)
    {
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < bytes.length; i++)
        {
            int parteAlta = ((bytes[i] >> 4) & 0xf) << 4;
            int parteBaixa = bytes[i] & 0xf;
            if (parteAlta == 0)
            {
                s.append('0');
            }
            s.append(Integer.toHexString(parteAlta | parteBaixa));
        }
        return s.toString();
    }
}